home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 5 / Gold Medal Software - Volume 5 (Gold Medal) (1995).iso / windows / misc / tapecalc.arj / TAPECALC.TXT < prev    next >
Text File  |  1994-11-01  |  60KB  |  1,810 lines

  1. VERSION 2.00
  2. Begin Form FormCalc 
  3.    BackColor       =   &H00C0C0C0&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Tape Calculator"
  6.    ClientHeight    =   3345
  7.    ClientLeft      =   75
  8.    ClientTop       =   900
  9.    ClientWidth     =   7575
  10.    FontBold        =   -1  'True
  11.    FontItalic      =   0   'False
  12.    FontName        =   "Fixedsys"
  13.    FontSize        =   9
  14.    FontStrikethru  =   0   'False
  15.    FontUnderline   =   0   'False
  16.    Height          =   4275
  17.    Icon            =   TAPECALC.FRX:0000
  18.    KeyPreview      =   -1  'True
  19.    Left            =   15
  20.    LinkTopic       =   "Form1"
  21.    MaxButton       =   0   'False
  22.    ScaleHeight     =   3345
  23.    ScaleWidth      =   7575
  24.    Top             =   30
  25.    Width           =   7695
  26.    Begin SSPanel TapePanel 
  27.       BackColor       =   &H00C0C0C0&
  28.       BevelInner      =   1  'Inset
  29.       BorderWidth     =   1
  30.       Caption         =   "Panel3D3"
  31.       Font3D          =   0  'None
  32.       ForeColor       =   &H000000FF&
  33.       Height          =   3345
  34.       Left            =   3405
  35.       TabIndex        =   30
  36.       Top             =   0
  37.       Width           =   4215
  38.       Begin Grid GridTape 
  39.          BorderStyle     =   0  'None
  40.          FixedCols       =   0
  41.          FixedRows       =   0
  42.          GridLines       =   0   'False
  43.          Height          =   3165
  44.          Left            =   75
  45.          Rows            =   1
  46.          ScrollBars      =   2  'Vertical
  47.          TabIndex        =   29
  48.          Top             =   90
  49.          Width           =   4050
  50.       End
  51.       Begin CommonDialog CMDialog1 
  52.          Left            =   0
  53.          Top             =   1440
  54.       End
  55.    End
  56.    Begin Timer Timer1 
  57.       Left            =   6240
  58.       Top             =   1200
  59.    End
  60.    Begin SSPanel ButtonPanel 
  61.       BackColor       =   &H00C0C0C0&
  62.       BevelInner      =   1  'Inset
  63.       BorderWidth     =   1
  64.       Font3D          =   0  'None
  65.       Height          =   3345
  66.       Left            =   0
  67.       TabIndex        =   31
  68.       Top             =   0
  69.       Width           =   3405
  70.       Begin SSCommand TCButton 
  71.          Caption         =   "^"
  72.          Font3D          =   3  'Inset w/light shading
  73.          FontBold        =   -1  'True
  74.          FontItalic      =   0   'False
  75.          FontName        =   "MS Sans Serif"
  76.          FontSize        =   18
  77.          FontStrikethru  =   0   'False
  78.          FontUnderline   =   0   'False
  79.          ForeColor       =   &H00000000&
  80.          Height          =   510
  81.          HelpContextID   =   112
  82.          Index           =   28
  83.          Left            =   2265
  84.          TabIndex        =   19
  85.          TabStop         =   0   'False
  86.          Top             =   690
  87.          Width           =   510
  88.       End
  89.       Begin SSCommand TCButton 
  90.          Caption         =   "Θ"
  91.          Font3D          =   3  'Inset w/light shading
  92.          FontBold        =   -1  'True
  93.          FontItalic      =   0   'False
  94.          FontName        =   "Wingdings"
  95.          FontSize        =   13.5
  96.          FontStrikethru  =   0   'False
  97.          FontUnderline   =   0   'False
  98.          ForeColor       =   &H000000C0&
  99.          Height          =   495
  100.          HelpContextID   =   113
  101.          Index           =   23
  102.          Left            =   1680
  103.          TabIndex        =   3
  104.          TabStop         =   0   'False
  105.          Top             =   690
  106.          Width           =   495
  107.       End
  108.       Begin PictureBox PictureMem 
  109.          AutoSize        =   -1  'True
  110.          BorderStyle     =   0  'None
  111.          Height          =   480
  112.          Left            =   120
  113.          Picture         =   TAPECALC.FRX:0302
  114.          ScaleHeight     =   480
  115.          ScaleWidth      =   480
  116.          TabIndex        =   32
  117.          TabStop         =   0   'False
  118.          Top             =   1290
  119.          Visible         =   0   'False
  120.          Width           =   480
  121.       End
  122.       Begin SSPanel PanelResult 
  123.          Alignment       =   4  'Right Justify - MIDDLE
  124.          BackColor       =   &H00000000&
  125.          BevelOuter      =   1  'Inset
  126.          BorderWidth     =   1
  127.          FloodColor      =   &H00C0E0FF&
  128.          Font3D          =   0  'None
  129.          FontBold        =   -1  'True
  130.          FontItalic      =   0   'False
  131.          FontName        =   "MS Sans Serif"
  132.          FontSize        =   12
  133.          FontStrikethru  =   0   'False
  134.          FontUnderline   =   0   'False
  135.          ForeColor       =   &H0000FF00&
  136.          Height          =   495
  137.          Left            =   120
  138.          TabIndex        =   33
  139.          Top             =   120
  140.          Width           =   3165
  141.       End
  142.       Begin SSCommand TCButton 
  143.          Caption         =   "τ"
  144.          Font3D          =   3  'Inset w/light shading
  145.          FontBold        =   -1  'True
  146.          FontItalic      =   0   'False
  147.          FontName        =   "Wingdings"
  148.          FontSize        =   13.5
  149.          FontStrikethru  =   0   'False
  150.          FontUnderline   =   0   'False
  151.          ForeColor       =   &H000000C0&
  152.          Height          =   495
  153.          HelpContextID   =   113
  154.          Index           =   21
  155.          Left            =   1080
  156.          TabIndex        =   2
  157.          TabStop         =   0   'False
  158.          Top             =   690
  159.          Width           =   495
  160.       End
  161.       Begin SSCommand TCButton 
  162.          Caption         =   "CE"
  163.          Font3D          =   3  'Inset w/light shading
  164.          FontBold        =   -1  'True
  165.          FontItalic      =   0   'False
  166.          FontName        =   "MS Sans Serif"
  167.          FontSize        =   12
  168.          FontStrikethru  =   0   'False
  169.          FontUnderline   =   0   'False
  170.          ForeColor       =   &H000000C0&
  171.          Height          =   495
  172.          HelpContextID   =   113
  173.          Index           =   20
  174.          Left            =   600
  175.          TabIndex        =   1
  176.          TabStop         =   0   'False
  177.          Top             =   690
  178.          Width           =   495
  179.       End
  180.       Begin SSCommand TCButton 
  181.          Caption         =   "C"
  182.          Font3D          =   3  'Inset w/light shading
  183.          FontBold        =   -1  'True
  184.          FontItalic      =   0   'False
  185.          FontName        =   "MS Sans Serif"
  186.          FontSize        =   12
  187.          FontStrikethru  =   0   'False
  188.          FontUnderline   =   0   'False
  189.          ForeColor       =   &H000000C0&
  190.          Height          =   495
  191.          HelpContextID   =   113
  192.          Index           =   19
  193.          Left            =   120
  194.          TabIndex        =   0
  195.          TabStop         =   0   'False
  196.          Top             =   690
  197.          Width           =   495
  198.       End
  199.       Begin SSCommand TCButton 
  200.          Caption         =   "MC"
  201.          Font3D          =   3  'Inset w/light shading
  202.          FontBold        =   -1  'True
  203.          FontItalic      =   0   'False
  204.          FontName        =   "MS Sans Serif"
  205.          FontSize        =   12
  206.          FontStrikethru  =   0   'False
  207.          FontUnderline   =   0   'False
  208.          ForeColor       =   &H00800080&
  209.          Height          =   375
  210.          HelpContextID   =   111
  211.          Index           =   18
  212.          Left            =   120
  213.          TabIndex        =   4
  214.          TabStop         =   0   'False
  215.          Top             =   1770
  216.          Width           =   525
  217.       End
  218.       Begin SSCommand TCButton 
  219.          Caption         =   "MR"
  220.          Font3D          =   3  'Inset w/light shading
  221.          FontBold        =   -1  'True
  222.          FontItalic      =   0   'False
  223.          FontName        =   "MS Sans Serif"
  224.          FontSize        =   12
  225.          FontStrikethru  =   0   'False
  226.          FontUnderline   =   0   'False
  227.          ForeColor       =   &H00800080&
  228.          Height          =   375
  229.          HelpContextID   =   111
  230.          Index           =   17
  231.          Left            =   120
  232.          TabIndex        =   5
  233.          TabStop         =   0   'False
  234.          Top             =   2130
  235.          Width           =   525
  236.       End
  237.       Begin SSCommand TCButton 
  238.          Caption         =   "MS"
  239.          Font3D          =   3  'Inset w/light shading
  240.          FontBold        =   -1  'True
  241.          FontItalic      =   0   'False
  242.          FontName        =   "MS Sans Serif"
  243.          FontSize        =   12
  244.          FontStrikethru  =   0   'False
  245.          FontUnderline   =   0   'False
  246.          ForeColor       =   &H00800080&
  247.          Height          =   375
  248.          HelpContextID   =   111
  249.          Index           =   16
  250.          Left            =   120
  251.          TabIndex        =   6
  252.          TabStop         =   0   'False
  253.          Top             =   2490
  254.          Width           =   525
  255.       End
  256.       Begin SSCommand TCButton 
  257.          Caption         =   "M+"
  258.          Font3D          =   3  'Inset w/light shading
  259.          FontBold        =   -1  'True
  260.          FontItalic      =   0   'False
  261.          FontName        =   "MS Sans Serif"
  262.          FontSize        =   12
  263.          FontStrikethru  =   0   'False
  264.          FontUnderline   =   0   'False
  265.          ForeColor       =   &H00800080&
  266.          Height          =   375
  267.          HelpContextID   =   111
  268.          Index           =   15
  269.          Left            =   120
  270.          TabIndex        =   7
  271.          TabStop         =   0   'False
  272.          Top             =   2850
  273.          Width           =   525
  274.       End
  275.       Begin SSCommand TCButton 
  276.          Caption         =   "="
  277.          Font3D          =   3  'Inset w/light shading
  278.          FontBold        =   -1  'True
  279.          FontItalic      =   0   'False
  280.          FontName        =   "MS Sans Serif"
  281.          FontSize        =   13.5
  282.          FontStrikethru  =   0   'False
  283.          FontUnderline   =   0   'False
  284.          ForeColor       =   &H00C0C000&
  285.          Height          =   510
  286.          HelpContextID   =   115
  287.          Index           =   14
  288.          Left            =   2775
  289.          TabIndex        =   28
  290.          TabStop         =   0   'False
  291.          Top             =   2730
  292.          Width           =   510
  293.       End
  294.       Begin SSCommand TCButton 
  295.          Caption         =   "1/x"
  296.          Font3D          =   3  'Inset w/light shading
  297.          FontBold        =   -1  'True
  298.          FontItalic      =   0   'False
  299.          FontName        =   "MS Sans Serif"
  300.          FontSize        =   13.5
  301.          FontStrikethru  =   0   'False
  302.          FontUnderline   =   0   'False
  303.          ForeColor       =   &H00008000&
  304.          Height          =   510
  305.          HelpContextID   =   113
  306.          Index           =   13
  307.          Left            =   2775
  308.          TabIndex        =   26
  309.          TabStop         =   0   'False
  310.          Top             =   1710
  311.          Width           =   510
  312.       End
  313.       Begin SSCommand TCButton 
  314.          Caption         =   "%"
  315.          Font3D          =   3  'Inset w/light shading
  316.          FontBold        =   -1  'True
  317.          FontItalic      =   0   'False
  318.          FontName        =   "MS Sans Serif"
  319.          FontSize        =   13.5
  320.          FontStrikethru  =   0   'False
  321.          FontUnderline   =   0   'False
  322.          ForeColor       =   &H00C0C000&
  323.          Height          =   510
  324.          HelpContextID   =   114
  325.          Index           =   12
  326.          Left            =   2775
  327.          TabIndex        =   27
  328.          TabStop         =   0   'False
  329.          Top             =   2220
  330.          Width           =   510
  331.       End
  332.       Begin SSCommand TCButton 
  333.          Caption         =   "╓`"
  334.          Font3D          =   3  'Inset w/light shading
  335.          FontBold        =   -1  'True
  336.          FontItalic      =   0   'False
  337.          FontName        =   "Symbol"
  338.          FontSize        =   12
  339.          FontStrikethru  =   0   'False
  340.          FontUnderline   =   0   'False
  341.          ForeColor       =   &H00008000&
  342.          Height          =   510
  343.          HelpContextID   =   113
  344.          Index           =   11
  345.          Left            =   2775
  346.          TabIndex        =   25
  347.          TabStop         =   0   'False
  348.          Top             =   1200
  349.          Width           =   510
  350.       End
  351.       Begin SSCommand TCButton 
  352.          Caption         =   "/"
  353.          Font3D          =   3  'Inset w/light shading
  354.          FontBold        =   -1  'True
  355.          FontItalic      =   0   'False
  356.          FontName        =   "MS Sans Serif"
  357.          FontSize        =   13.5
  358.          FontStrikethru  =   0   'False
  359.          FontUnderline   =   0   'False
  360.          ForeColor       =   &H00000000&
  361.          Height          =   510
  362.          HelpContextID   =   112
  363.          Index           =   27
  364.          Left            =   2265
  365.          TabIndex        =   20
  366.          TabStop         =   0   'False
  367.          Top             =   1200
  368.          Width           =   510
  369.       End
  370.       Begin SSCommand TCButton 
  371.          Caption         =   "*"
  372.          Font3D          =   3  'Inset w/light shading
  373.          FontBold        =   -1  'True
  374.          FontItalic      =   0   'False
  375.          FontName        =   "MS Sans Serif"
  376.          FontSize        =   13.5
  377.          FontStrikethru  =   0   'False
  378.          FontUnderline   =   0   'False
  379.          ForeColor       =   &H00000000&
  380.          Height          =   510
  381.          HelpContextID   =   112
  382.          Index           =   26
  383.          Left            =   2265
  384.          TabIndex        =   21
  385.          TabStop         =   0   'False
  386.          Top             =   1710
  387.          Width           =   510
  388.       End
  389.       Begin SSCommand TCButton 
  390.          Caption         =   "-"
  391.          Font3D          =   3  'Inset w/light shading
  392.          FontBold        =   -1  'True
  393.          FontItalic      =   0   'False
  394.          FontName        =   "MS Sans Serif"
  395.          FontSize        =   13.5
  396.          FontStrikethru  =   0   'False
  397.          FontUnderline   =   0   'False
  398.          ForeColor       =   &H00000000&
  399.          Height          =   510
  400.          HelpContextID   =   112
  401.          Index           =   25
  402.          Left            =   2265
  403.          TabIndex        =   22
  404.          TabStop         =   0   'False
  405.          Top             =   2220
  406.          Width           =   510
  407.       End
  408.       Begin SSCommand TCButton 
  409.          Caption         =   "+"
  410.          Font3D          =   3  'Inset w/light shading
  411.          FontBold        =   -1  'True
  412.          FontItalic      =   0   'False
  413.          FontName        =   "MS Sans Serif"
  414.          FontSize        =   13.5
  415.          FontStrikethru  =   0   'False
  416.          FontUnderline   =   0   'False
  417.          ForeColor       =   &H00000000&
  418.          Height          =   510
  419.          HelpContextID   =   112
  420.          Index           =   24
  421.          Left            =   2265
  422.          TabIndex        =   23
  423.          TabStop         =   0   'False
  424.          Top             =   2730
  425.          Width           =   510
  426.       End
  427.       Begin SSCommand TCButton 
  428.          Caption         =   "."
  429.          Font3D          =   3  'Inset w/light shading
  430.          FontBold        =   -1  'True
  431.          FontItalic      =   0   'False
  432.          FontName        =   "Symbol"
  433.          FontSize        =   17.25
  434.          FontStrikethru  =   0   'False
  435.          FontUnderline   =   0   'False
  436.          ForeColor       =   &H00800000&
  437.          Height          =   495
  438.          HelpContextID   =   110
  439.          Index           =   10
  440.          Left            =   1200
  441.          TabIndex        =   18
  442.          TabStop         =   0   'False
  443.          Top             =   2730
  444.          Width           =   495
  445.       End
  446.       Begin SSCommand TCButton 
  447.          Caption         =   "▒"
  448.          Font3D          =   3  'Inset w/light shading
  449.          FontBold        =   -1  'True
  450.          FontItalic      =   0   'False
  451.          FontName        =   "MS Sans Serif"
  452.          FontSize        =   18
  453.          FontStrikethru  =   0   'False
  454.          FontUnderline   =   0   'False
  455.          ForeColor       =   &H00008000&
  456.          Height          =   510
  457.          HelpContextID   =   113
  458.          Index           =   22
  459.          Left            =   2775
  460.          TabIndex        =   24
  461.          TabStop         =   0   'False
  462.          Top             =   690
  463.          Width           =   510
  464.       End
  465.       Begin SSCommand TCButton 
  466.          Caption         =   "9"
  467.          Font3D          =   3  'Inset w/light shading
  468.          FontBold        =   -1  'True
  469.          FontItalic      =   0   'False
  470.          FontName        =   "MS Sans Serif"
  471.          FontSize        =   13.5
  472.          FontStrikethru  =   0   'False
  473.          FontUnderline   =   0   'False
  474.          ForeColor       =   &H00800000&
  475.          Height          =   495
  476.          HelpContextID   =   110
  477.          Index           =   9
  478.          Left            =   1680
  479.          TabIndex        =   10
  480.          TabStop         =   0   'False
  481.          Top             =   1290
  482.          Width           =   495
  483.       End
  484.       Begin SSCommand TCButton 
  485.          Caption         =   "8"
  486.          Font3D          =   3  'Inset w/light shading
  487.          FontBold        =   -1  'True
  488.          FontItalic      =   0   'False
  489.          FontName        =   "MS Sans Serif"
  490.          FontSize        =   13.5
  491.          FontStrikethru  =   0   'False
  492.          FontUnderline   =   0   'False
  493.          ForeColor       =   &H00800000&
  494.          Height          =   495
  495.          HelpContextID   =   110
  496.          Index           =   8
  497.          Left            =   1200
  498.          TabIndex        =   9
  499.          TabStop         =   0   'False
  500.          Top             =   1290
  501.          Width           =   495
  502.       End
  503.       Begin SSCommand TCButton 
  504.          Caption         =   "7"
  505.          Font3D          =   3  'Inset w/light shading
  506.          FontBold        =   -1  'True
  507.          FontItalic      =   0   'False
  508.          FontName        =   "MS Sans Serif"
  509.          FontSize        =   13.5
  510.          FontStrikethru  =   0   'False
  511.          FontUnderline   =   0   'False
  512.          ForeColor       =   &H00800000&
  513.          Height          =   495
  514.          HelpContextID   =   110
  515.          Index           =   7
  516.          Left            =   720
  517.          TabIndex        =   8
  518.          TabStop         =   0   'False
  519.          Top             =   1290
  520.          Width           =   495
  521.       End
  522.       Begin SSCommand TCButton 
  523.          Caption         =   "6"
  524.          Font3D          =   3  'Inset w/light shading
  525.          FontBold        =   -1  'True
  526.          FontItalic      =   0   'False
  527.          FontName        =   "MS Sans Serif"
  528.          FontSize        =   13.5
  529.          FontStrikethru  =   0   'False
  530.          FontUnderline   =   0   'False
  531.          ForeColor       =   &H00800000&
  532.          Height          =   495
  533.          HelpContextID   =   110
  534.          Index           =   6
  535.          Left            =   1680
  536.          TabIndex        =   13
  537.          TabStop         =   0   'False
  538.          Top             =   1770
  539.          Width           =   495
  540.       End
  541.       Begin SSCommand TCButton 
  542.          Caption         =   "5"
  543.          Font3D          =   3  'Inset w/light shading
  544.          FontBold        =   -1  'True
  545.          FontItalic      =   0   'False
  546.          FontName        =   "MS Sans Serif"
  547.          FontSize        =   13.5
  548.          FontStrikethru  =   0   'False
  549.          FontUnderline   =   0   'False
  550.          ForeColor       =   &H00800000&
  551.          Height          =   495
  552.          HelpContextID   =   110
  553.          Index           =   5
  554.          Left            =   1200
  555.          TabIndex        =   12
  556.          TabStop         =   0   'False
  557.          Top             =   1770
  558.          Width           =   495
  559.       End
  560.       Begin SSCommand TCButton 
  561.          Caption         =   "4"
  562.          Font3D          =   3  'Inset w/light shading
  563.          FontBold        =   -1  'True
  564.          FontItalic      =   0   'False
  565.          FontName        =   "MS Sans Serif"
  566.          FontSize        =   13.5
  567.          FontStrikethru  =   0   'False
  568.          FontUnderline   =   0   'False
  569.          ForeColor       =   &H00800000&
  570.          Height          =   495
  571.          HelpContextID   =   110
  572.          Index           =   4
  573.          Left            =   720
  574.          TabIndex        =   11
  575.          TabStop         =   0   'False
  576.          Top             =   1770
  577.          Width           =   495
  578.       End
  579.       Begin SSCommand TCButton 
  580.          Caption         =   "3"
  581.          Font3D          =   3  'Inset w/light shading
  582.          FontBold        =   -1  'True
  583.          FontItalic      =   0   'False
  584.          FontName        =   "MS Sans Serif"
  585.          FontSize        =   13.5
  586.          FontStrikethru  =   0   'False
  587.          FontUnderline   =   0   'False
  588.          ForeColor       =   &H00800000&
  589.          Height          =   495
  590.          HelpContextID   =   110
  591.          Index           =   3
  592.          Left            =   1680
  593.          TabIndex        =   16
  594.          TabStop         =   0   'False
  595.          Top             =   2250
  596.          Width           =   495
  597.       End
  598.       Begin SSCommand TCButton 
  599.          Caption         =   "2"
  600.          Font3D          =   3  'Inset w/light shading
  601.          FontBold        =   -1  'True
  602.          FontItalic      =   0   'False
  603.          FontName        =   "MS Sans Serif"
  604.          FontSize        =   13.5
  605.          FontStrikethru  =   0   'False
  606.          FontUnderline   =   0   'False
  607.          ForeColor       =   &H00800000&
  608.          Height          =   495
  609.          HelpContextID   =   110
  610.          Index           =   2
  611.          Left            =   1200
  612.          TabIndex        =   15
  613.          TabStop         =   0   'False
  614.          Top             =   2250
  615.          Width           =   495
  616.       End
  617.       Begin SSCommand TCButton 
  618.          Caption         =   "1"
  619.          Font3D          =   3  'Inset w/light shading
  620.          FontBold        =   -1  'True
  621.          FontItalic      =   0   'False
  622.          FontName        =   "MS Sans Serif"
  623.          FontSize        =   13.5
  624.          FontStrikethru  =   0   'False
  625.          FontUnderline   =   0   'False
  626.          ForeColor       =   &H00800000&
  627.          Height          =   495
  628.          HelpContextID   =   110
  629.          Index           =   1
  630.          Left            =   720
  631.          TabIndex        =   14
  632.          TabStop         =   0   'False
  633.          Top             =   2250
  634.          Width           =   495
  635.       End
  636.       Begin SSCommand TCButton 
  637.          Caption         =   "0"
  638.          Font3D          =   3  'Inset w/light shading
  639.          FontBold        =   -1  'True
  640.          FontItalic      =   0   'False
  641.          FontName        =   "MS Sans Serif"
  642.          FontSize        =   13.5
  643.          FontStrikethru  =   0   'False
  644.          FontUnderline   =   0   'False
  645.          ForeColor       =   &H00800000&
  646.          Height          =   495
  647.          HelpContextID   =   110
  648.          Index           =   0
  649.          Left            =   720
  650.          TabIndex        =   17
  651.          TabStop         =   0   'False
  652.          Top             =   2730
  653.          Width           =   495
  654.       End
  655.       Begin MhState NumLockState 
  656.          BackColor       =   &H00C0C0C0&
  657.          Height          =   420
  658.          Left            =   1740
  659.          Style           =   1  'Num Lock
  660.          TabIndex        =   34
  661.          TabStop         =   0   'False
  662.          TimerInterval   =   1000
  663.          Top             =   2790
  664.          Value           =   0   'False
  665.          Width           =   420
  666.       End
  667.    End
  668.    Begin Menu mnu_Main 
  669.       Caption         =   "&File"
  670.       HelpContextID   =   101
  671.       Index           =   0
  672.       Begin Menu mnu_File 
  673.          Caption         =   "&New tape"
  674.          HelpContextID   =   101
  675.          Index           =   0
  676.          Shortcut        =   ^N
  677.       End
  678.       Begin Menu mnu_File 
  679.          Caption         =   "&Save tape"
  680.          HelpContextID   =   101
  681.          Index           =   1
  682.       End
  683.       Begin Menu mnu_File 
  684.          Caption         =   "Save tape &As..."
  685.          HelpContextID   =   101
  686.          Index           =   2
  687.       End
  688.       Begin Menu mnu_File 
  689.          Caption         =   "-"
  690.          Index           =   3
  691.       End
  692.       Begin Menu mnu_File 
  693.          Caption         =   "E&xit"
  694.          HelpContextID   =   101
  695.          Index           =   4
  696.       End
  697.    End
  698.    Begin Menu mnu_Main 
  699.       Caption         =   "&Edit"
  700.       Index           =   1
  701.       Begin Menu mnu_Edit 
  702.          Caption         =   "&Copy"
  703.          HelpContextID   =   102
  704.          Index           =   0
  705.          Shortcut        =   ^C
  706.       End
  707.       Begin Menu mnu_Edit 
  708.          Caption         =   "&Paste"
  709.          HelpContextID   =   103
  710.          Index           =   1
  711.          Shortcut        =   ^V
  712.       End
  713.       Begin Menu mnu_Edit 
  714.          Caption         =   "Copy &Result"
  715.          HelpContextID   =   116
  716.          Index           =   2
  717.          Shortcut        =   ^R
  718.       End
  719.       Begin Menu mnu_Edit 
  720.          Caption         =   "-"
  721.          Index           =   3
  722.       End
  723.       Begin Menu mnu_Edit 
  724.          Caption         =   "Paste &Options..."
  725.          HelpContextID   =   106
  726.          Index           =   4
  727.       End
  728.    End
  729.    Begin Menu mnu_Main 
  730.       Caption         =   "&View"
  731.       Index           =   2
  732.       Begin Menu mnu_View 
  733.          Caption         =   "&Tape Visible"
  734.          Checked         =   -1  'True
  735.          HelpContextID   =   107
  736.          Index           =   0
  737.       End
  738.       Begin Menu mnu_View 
  739.          Caption         =   "Tape &Font..."
  740.          HelpContextID   =   108
  741.          Index           =   1
  742.       End
  743.       Begin Menu mnu_View 
  744.          Caption         =   "-"
  745.          Index           =   2
  746.       End
  747.       Begin Menu mnu_View 
  748.          Caption         =   "Floating &Point"
  749.          HelpContextID   =   109
  750.          Index           =   3
  751.       End
  752.       Begin Menu mnu_View 
  753.          Caption         =   "Fixed - &2 decimals"
  754.          HelpContextID   =   109
  755.          Index           =   4
  756.       End
  757.       Begin Menu mnu_View 
  758.          Caption         =   "Fixed - &4 decimals"
  759.          HelpContextID   =   109
  760.          Index           =   5
  761.       End
  762.    End
  763.    Begin Menu mnu_Main 
  764.       Caption         =   "&Help"
  765.       HelpContextID   =   104
  766.       Index           =   3
  767.       Begin Menu mnu_Help 
  768.          Caption         =   "&Contents"
  769.          HelpContextID   =   104
  770.          Index           =   0
  771.       End
  772.       Begin Menu mnu_Help 
  773.          Caption         =   "&Search for Help on..."
  774.          HelpContextID   =   104
  775.          Index           =   1
  776.       End
  777.       Begin Menu mnu_Help 
  778.          Caption         =   "&How to Use Help"
  779.          HelpContextID   =   104
  780.          Index           =   2
  781.       End
  782.       Begin Menu mnu_Help 
  783.          Caption         =   "-"
  784.          Index           =   3
  785.       End
  786.       Begin Menu mnu_Help 
  787.          Caption         =   "&About TapeCalc..."
  788.          HelpContextID   =   104
  789.          Index           =   4
  790.       End
  791.    End
  792. End
  793. Option Explicit
  794.  
  795. Const MODAL = 1
  796.  
  797. Dim Entry#      ' value entered in calculator
  798. Dim Accum#      ' accumulated result of calculations
  799. Dim Memory#     ' the value controlled by memory buttons
  800. Dim EntryStr$   ' string equivalent of value entered
  801. Dim ButtonUp%   ' button equivalent to last key pressed;
  802.                 '  used to show button down/up
  803.  
  804. Dim State%      ' effect of buttons depends on state; value is
  805.                 '  one of following constants
  806. Const STATE_FIRST = 0     ' entering first number
  807. Const STATE_OP = 1      ' entered an operator; first number frozen
  808. Const STATE_SECOND = 2    ' entering second number
  809. Const STATE_FROZE = 3     ' second number frozen
  810. Const STATE_OVERFLOW = 4  ' calculation overflowed; must press clear
  811.  
  812. Dim Op%         ' the pending operation; value is one of following
  813. Const OPS_NONE = 0
  814. Const OPS_PLUS = 1
  815. Const OPS_MINUS = 2
  816. Const OPS_TIMES = 3
  817. Const OPS_DIVIDE = 4
  818. ' If you add another operator, define a constant for it that
  819. '  has the current value of OPS_POWER, and add one to
  820. '  the value of OPS_POWER
  821. Const OPS_POWER = 5
  822.  
  823.  
  824. Dim CharsInTape%    ' number of chars that fit in tape's
  825.                     '  width (changes with font)
  826. Dim GridBaseHeight% ' defined height of tape
  827. Dim LinesShown%     ' actual number of lines shown in grid
  828.                     '  (changes with font)
  829.  
  830. Dim FixedFloat%     ' fixed or floating point format for results
  831. Dim FormatStr$(0 To 4) ' strings to produce fixed, 2-decimal, 4-decimal
  832.                        '  formats, plus font-specific regular and
  833.                        '  scientific notation for too-wide numbers
  834.  
  835. Dim TapeFileName$
  836. Dim AddWhere%   ' determines where (if at all) to insert
  837.                 '  operators during paste from clipboard
  838. Dim AddWhat%    ' determines what operator to insert during
  839.                 '  paste from clipboard
  840. Dim AddOp%(0 To 4) ' string used for operator during paste
  841.                    '  from clipboard
  842.  
  843. Dim Sync% ' used to keep Entry and EntryStr in sync
  844. Const SYNC_StrAhead = 0
  845. Const SYNC_NumAhead = 1
  846. Const SYNC_InSync = 2
  847.  
  848. Dim TapeLength%   ' number of lines saved in tape. If more
  849.                   '  lines added, oldest lines are discarded
  850.  
  851. Const BTN_0 = 0
  852. Const BTN_1 = 1
  853. Const BTN_2 = 2
  854. Const BTN_3 = 3
  855. Const BTN_4 = 4
  856. Const BTN_5 = 5
  857. Const BTN_6 = 6
  858. Const BTN_7 = 7
  859. Const BTN_8 = 8
  860. Const BTN_9 = 9
  861. Const BTN_DEC = 10
  862. Const BTN_SQRT = 11
  863. Const BTN_PERCENT = 12
  864. Const BTN_INVERSE = 13
  865. Const BTN_EQUAL = 14
  866. Const BTN_MP = 15
  867. Const BTN_MS = 16
  868. Const BTN_MR = 17
  869. Const BTN_MC = 18
  870. Const BTN_CLEAR = 19
  871. Const BTN_CE = 20
  872. Const BTN_BACKSPACE = 21
  873. Const BTN_PLUSMINUS = 22
  874. Const BTN_ADVANCE = 23
  875. ' Add constants for any new non-operator
  876. '   buttons in order here, and update values
  877. '   of operator button constants that follow
  878. Const BTN_PLUS = 24
  879. Const BTN_MINUS = 25
  880. Const BTN_TIMES = 26
  881. Const BTN_DIVIDE = 27
  882. ' If you add a new binary operator button, define a BTN_
  883. '  constant for it that has the current value of BTN_POWER.
  884. '  Add 1 to the value of BTN_POWER, and make sure that
  885. '  the Index property of the power button and the new button
  886. '  are the same as their BTN_XXXX constants.
  887. 'The code for handling the new operator goes in
  888. '  the Operate subroutine.
  889. Const BTN_POWER = 28
  890.  
  891. Const OPBTN_FIRST = BTN_PLUS
  892. Const OPBTN_LAST = BTN_POWER
  893.  
  894. ' Windows API function call declarations
  895. Declare Function GetTextExtent& Lib "GDI" (ByVal hDC%, ByVal lpString$, ByVal nCount%)
  896. Declare Function GetSystemMetrics% Lib "User" (ByVal nIndex%)
  897. Const SM_CXVSCROLL = 2
  898.  
  899. Declare Function SendMessage& Lib "User" (ByVal hWnd%, ByVal wMsg%, ByVal wParam%, lParam As Any)
  900. Const BM_SETSTATE = &H403
  901.  
  902. Declare Sub MessageBeep Lib "User" (ByVal wType%)
  903.  
  904. Declare Function GetPrivateProfileInt% Lib "Kernel" (ByVal lpApplicationName$, ByVal lpKeyName$, ByVal nDefault%, ByVal lpFileName$)
  905. Declare Function WritePrivateProfileString% Lib "Kernel" (ByVal lpApplicationName$, ByVal lpKeyName$, ByVal lpString$, ByVal lplFileName$)
  906. Declare Function GetPrivateProfileString% Lib "Kernel" (ByVal lpApplicationName$, ByVal lpKeyName As Any, ByVal lpDefault$, ByVal lpReturnedString$, ByVal nSize%, ByVal lpFileName$)
  907.  
  908. Sub AddToTape (ByVal S1$, ByVal S2$)
  909.   ' Add number in S1, symbol in S2 to tape
  910.   If S1 = "" Then S1 = "0"
  911.   ' If tape is full, discard first line
  912.   If GridTape.Rows = TapeLength Then GridTape.RemoveItem 0
  913.   GridTape.AddItem S1 + Chr$(9) + " " + S2
  914.   ' Bring new line into view
  915.   If GridTape.Rows > LinesShown Then
  916.     GridTape.TopRow = GridTape.Rows - LinesShown
  917.   End If
  918. End Sub
  919.  
  920. Sub Dispatch (ByVal vState%, ByVal C%)
  921.   ' Pass value of pressed button to the appropriate
  922.   '  function, depending on the current state
  923.   Select Case vState
  924.     Case STATE_FIRST
  925.       StateFirst C
  926.     Case STATE_OP
  927.       StateOp C
  928.     Case STATE_SECOND
  929.       StateSecond C
  930.     Case STATE_FROZE
  931.       StateFroze C
  932.     Case STATE_OVERFLOW
  933.       StateOverflow C
  934.   End Select
  935.   SyncUp
  936. End Sub
  937.  
  938. Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
  939.   ' Handle keys that aren't detected by KeyPress. Converts
  940.   '  them into the equivalent of button-presses
  941.   Dim Success%
  942.   ' If a button is visibly pressed, un-press it
  943.   If ButtonUp >= BTN_0 Then
  944.     Success = SendMessage(TCButton(ButtonUp).hWnd, BM_SETSTATE, 0, 0)
  945.     ButtonUp = -1
  946.   End If
  947.   ' Constants defining virtual keys
  948.   Const VK_DELETE = &H2E
  949.   Const VK_F2 = &H71
  950.   Const VK_F3 = &H72
  951.   Const VK_F4 = &H73
  952.   Const VK_F5 = &H74
  953.   Const VK_F6 = &H75
  954.   Const VK_F7 = &H76
  955.   Const VK_F8 = &H77
  956.   Const VK_F9 = &H78
  957.   Select Case KeyCode
  958.     Case 13, 32
  959.       KeyCode = 0
  960.     Case VK_F2
  961.       ButtonUp = BTN_PLUSMINUS
  962.     Case VK_F3
  963.       ButtonUp = BTN_SQRT
  964.     Case VK_F4
  965.       ButtonUp = BTN_INVERSE
  966.     Case VK_F5
  967.       ButtonUp = BTN_MC
  968.     Case VK_F6
  969.       ButtonUp = BTN_MR
  970.     Case VK_F7
  971.       ButtonUp = BTN_MS
  972.     Case VK_F8
  973.       ButtonUp = BTN_MP
  974.     Case VK_F9
  975.       ButtonUp = BTN_ADVANCE
  976.     Case VK_DELETE
  977.       ButtonUp = BTN_CE
  978.   End Select
  979.   If ButtonUp >= 0 Then
  980.     ' Visibly press the corresponding button, and set the timer
  981.     '  to un-press it in 0.3 seconds.
  982.     Success = SendMessage(TCButton(ButtonUp).hWnd, BM_SETSTATE, 1, 0)
  983.     TCButton(ButtonUp).SetFocus
  984.     Timer1.Interval = 300
  985.     Dispatch State, ButtonUp
  986.   End If
  987. End Sub
  988.  
  989. Sub Form_KeyPress (KeyAscii As Integer)
  990.   Dim Success%
  991.   ' If a button is visibly pressed, un-press it.
  992.   If ButtonUp >= BTN_0 Then
  993.     Success = SendMessage(TCButton(ButtonUp).hWnd, BM_SETSTATE, 0, 0)
  994.     ButtonUp = -1
  995.   End If
  996.   ButtonUp = -1
  997.   Select Case KeyAscii
  998.     Case 8 ' Backspace
  999.       ButtonUp = BTN_BACKSPACE
  1000.     Case 27 ' Escape
  1001.       ButtonUp = BTN_CLEAR
  1002.     Case 37 ' %
  1003.       ButtonUp = BTN_PERCENT
  1004.     Case 42 ' *
  1005.       ButtonUp = BTN_TIMES
  1006.     Case 43 ' +
  1007.       ButtonUp = BTN_PLUS
  1008.     Case 45 ' -
  1009.       ButtonUp = BTN_MINUS
  1010.     Case 46 ' .
  1011.       ButtonUp = BTN_DEC
  1012.     Case 47 ' /
  1013.       ButtonUp = BTN_DIVIDE
  1014.     Case 48 ' 0
  1015.       ButtonUp = BTN_0
  1016.     Case 49 ' 1
  1017.       ButtonUp = BTN_1
  1018.     Case 50 ' 2
  1019.       ButtonUp = BTN_2
  1020.     Case 51 ' 3
  1021.       ButtonUp = BTN_3
  1022.     Case 52 ' 4
  1023.       ButtonUp = BTN_4
  1024.     Case 53 ' 5
  1025.       ButtonUp = BTN_5
  1026.     Case 54 ' 6
  1027.       ButtonUp = BTN_6
  1028.     Case 55 ' 7
  1029.       ButtonUp = BTN_7
  1030.     Case 56 ' 8
  1031.       ButtonUp = BTN_8
  1032.     Case 57 ' 9
  1033.       ButtonUp = BTN_9
  1034.     Case 61, 13 ' = or Enter
  1035.       ButtonUp = BTN_EQUAL
  1036.     Case 94 ' ^
  1037.       ButtonUp = BTN_POWER
  1038.   End Select
  1039.   If ButtonUp >= 0 Then
  1040.     ' Visibly press the corresponding button, and set the timer
  1041.     '  to un-press it in 0.3 seconds.
  1042.     Success = SendMessage(TCButton(ButtonUp).hWnd, BM_SETSTATE, 1, 0)
  1043.     TCButton(ButtonUp).SetFocus
  1044.     Timer1.Interval = 300
  1045.     Dispatch State, ButtonUp
  1046.   End If
  1047. End Sub
  1048.  
  1049. Sub Form_Load ()
  1050.   Dim N%
  1051.   ' Initialize variables
  1052.   FormatStr(0) = "#,,0.###############"
  1053.   FormatStr(1) = "Standard"
  1054.   FormatStr(2) = "#,,0.0000"
  1055.   Entry = 0
  1056.   EntryStr = ""
  1057.   Accum = 0
  1058.   Memory = 0
  1059.   ButtonUp = -1
  1060.   State = STATE_FIRST
  1061.   Op = OPS_NONE
  1062.   Sync = SYNC_InSync
  1063.   TapeFileName = ""
  1064.   AddOp(0) = 43 ' +
  1065.   AddOp(1) = 45 ' -
  1066.   AddOp(2) = 42 ' *
  1067.   AddOp(3) = 47 ' /
  1068.   AddOp(4) = 94 ' ^
  1069.  
  1070.   ' Get stored values from INI file
  1071.   mnu_View(0).Checked = GetPrivateProfileInt("Options", "TapeVisible", True, "TAPECALC.INI")
  1072.   FixedFloat = GetPrivateProfileInt("Options", "FixedFloat", 0, "TAPECALC.INI")
  1073.   mnu_View(FixedFloat + 3).Checked = True
  1074.   If mnu_View(0).Checked Then
  1075.     FormCalc.Width = ButtonPanel.Width + TapePanel.Width + 30
  1076.   Else
  1077.     FormCalc.Width = ButtonPanel.Width + 30
  1078.   End If
  1079.   TapeLength = GetPrivateProfileInt("Options", "TapeLength", 255, "TAPECALC.INI")
  1080.   AddWhere = GetPrivateProfileInt("Options", "PasteAddWhere", 0, "TAPECALC.INI")
  1081.   AddWhat = GetPrivateProfileInt("Options", "PasteAddWhat", 0, "TAPECALC.INI")
  1082.   Left = GetPrivateProfileInt("Position", "Main Left", 120, "TAPECALC.INI")
  1083.   Top = GetPrivateProfileInt("Position", "Main Top", 120, "TAPECALC.INI")
  1084.   ' If main form's stored position is off-screen, put it on-screen
  1085.   If Left + Width > Screen.Width Then Left = Screen.Width - Width
  1086.   If Top + Height > Screen.Height Then Top = Screen.Height - Height
  1087.   FormOptions.Left = GetPrivateProfileInt("Position", "Options Left", 240, "TAPECALC.INI")
  1088.   FormOptions.Top = GetPrivateProfileInt("Position", "Options Top", 240, "TAPECALC.INI")
  1089.   ' If options form's stored position is off-screen, put it on-screen
  1090.   If FormOptions.Left + FormOptions.Width > Screen.Width Then
  1091.     FormOptions.Left = Screen.Width - FormOptions.Width
  1092.   End If
  1093.   If FormOptions.Top + FormOptions.Height > Screen.Height Then
  1094.     FormOptions.Top = Screen.Height - FormOptions.Height
  1095.   End If
  1096.   GridTape.FontBold = GetPrivateProfileInt("Font", "Bold", True, "TAPECALC.INI")
  1097.   GridTape.FontItalic = GetPrivateProfileInt("Font", "Italic", False, "TAPECALC.INI")
  1098.   GridTape.FontSize = GetPrivateProfileInt("Font", "Size", 8, "TAPECALC.INI")
  1099.   Dim FntNam$, FntNamLen%
  1100.   FntNam = Space$(81)
  1101.   FntNamLen = GetPrivateProfileString("Font", "Name", "MS Sans Serif", FntNam, 80, "TAPECALC.INI")
  1102.   GridTape.FontName = Left(FntNam, FntNamLen)
  1103.   ' Set font info for Picture because we use its hDC
  1104.   PictureMem.FontBold = GridTape.FontBold
  1105.   PictureMem.FontItalic = GridTape.FontItalic
  1106.   PictureMem.FontSize = GridTape.FontSize
  1107.   PictureMem.FontName = GridTape.FontName
  1108.   ' Perform necessary run-time initialization
  1109.   GridTape.ColAlignment(0) = 1 ' right align
  1110.   GridBaseHeight = GridTape.Height
  1111.   GetTapeMetrics
  1112.   ' Fill visible portion of tape with blank lines
  1113.   For N = 1 To LinesShown
  1114.     GridTape.AddItem ""
  1115.   Next N
  1116. End Sub
  1117.  
  1118. Sub Form_QueryUnload (Cancel As Integer, UnloadMode As Integer)
  1119.   ' Save position of both windows to INI file
  1120.   Dim Success%
  1121.   If WindowState = 0 Then ' record main form's position if NOT iconic
  1122.     Success = WritePrivateProfileString("Position", "Main Top", Format$(Top), "TAPECALC.INI")
  1123.     Success = WritePrivateProfileString("Position", "Main Left", Format$(Left), "TAPECALC.INI")
  1124.   End If
  1125.   Success = WritePrivateProfileString("Position", "Options Top", Format$(FormOptions.Top), "TAPECALC.INI")
  1126.   Success = WritePrivateProfileString("Position", "Options Left", Format$(FormOptions.Left), "TAPECALC.INI")
  1127.   ' It's polite to close the help system when the program ends
  1128.   Const HELP_QUIT = &H2
  1129.   CMDialog1.HelpCommand = HELP_QUIT
  1130.   CMDialog1.Action = 6
  1131. End Sub
  1132.  
  1133. Sub Form_Unload (Cancel As Integer)
  1134.   ' When unloading main form, don't forget the option form!
  1135.   Unload FormOptions
  1136. End Sub
  1137.  
  1138. Sub GetTapeMetrics ()
  1139.   ' Adjust variables to selected font
  1140.   Dim TextEx&, TestStr$, PixelsPerDigit%, LineHeight%, N%, FmtWid%
  1141.   TestStr$ = "0123456789"
  1142.   TextEx = GetTextExtent(PictureMem.hDC, TestStr, 10)
  1143.   PixelsPerDigit = (TextEx Mod &H10000) \ 10
  1144.   ' Set tape columns to fill tape's width exactly
  1145.   GridTape.ColWidth(1) = (PixelsPerDigit * 4) * Screen.TwipsPerPixelX
  1146.   GridTape.ColWidth(0) = GridTape.Width - GridTape.ColWidth(1) - (GetSystemMetrics(SM_CXVSCROLL) * Screen.TwipsPerPixelX)
  1147.   LineHeight = ((TextEx \ &H10000) + 2) * Screen.TwipsPerPixelY
  1148.   ' Calculate number of lines that will show in current font
  1149.   LinesShown = GridBaseHeight \ LineHeight
  1150.   ' Set tape height to avoid partial lines
  1151.   GridTape.Height = LinesShown * LineHeight
  1152.   ' Set existing rows to new height
  1153.   For N = 0 To GridTape.Rows - 1
  1154.     GridTape.RowHeight(N) = LineHeight
  1155.   Next N
  1156.   ' Adjust tape if necessary so last line is shown
  1157.   If GridTape.Rows > LinesShown Then
  1158.     GridTape.TopRow = GridTape.Rows - LinesShown
  1159.   End If
  1160.   ' Calculate how many characters fit in tape's width
  1161.   CharsInTape = (GridTape.Width \ Screen.TwipsPerPixelX) \ PixelsPerDigit
  1162.   FmtWid = CharsInTape - 14
  1163.   If FmtWid > 14 Then FmtWid = 14
  1164.   ' Create scientific format string for use with too-wide numbers
  1165.   FormatStr(3) = "0." + String$(FmtWid, "0") + "E+00"
  1166.   TextEx = 0
  1167. End Sub
  1168.  
  1169. Sub GridTape_KeyDown (KeyCode As Integer, Shift As Integer)
  1170.   ' Prevents the user from accidentally "shoving" the
  1171.   ' left column of the grid off-screen.
  1172.   Const VK_RIGHT = &H27
  1173.   GridTape.Col = 0
  1174.   If KeyCode = VK_RIGHT Then KeyCode = 0
  1175. End Sub
  1176.  
  1177. Sub GridTape_MouseMove (Button As Integer, Shift As Integer, X As Single, y As Single)
  1178.   ' Prevents the user from accidentally "shoving" the
  1179.   ' left column of the grid off-screen.
  1180.   GridTape.LeftCol = 0
  1181. End Sub
  1182.  
  1183. Sub GridTape_RowColChange ()
  1184.   ' Prevents the user from accidentally "shoving" the
  1185.   ' left column of the grid off-screen.
  1186.   GridTape.LeftCol = 0
  1187. End Sub
  1188.  
  1189. Sub GridTape_SelChange ()
  1190.   ' Prevents the user from accidentally "shoving" the
  1191.   ' left column of the grid off-screen.
  1192.   GridTape.LeftCol = 0
  1193. End Sub
  1194.  
  1195. Sub mnu_Edit_Click (Index As Integer)
  1196.   Dim N%, Txt$, AscVal%
  1197.   Select Case Index
  1198.     Case 0
  1199.       ' Copy all or selected tape to clipboard
  1200.       If SelectedTape(Txt) > 0 Then
  1201.         Clipboard.Clear
  1202.         Clipboard.SetText Txt
  1203.       End If
  1204.     Case 1
  1205.       ' Paste clipboard into tape, optionally adding
  1206.       '  an operator after each number or each line
  1207.       Txt = Clipboard.GetText(1)
  1208.       If Txt <> "" Then
  1209.         For N = 1 To Len(Txt)
  1210.           AscVal = Asc(Mid(Txt, N, 1))
  1211.           Select Case AscVal
  1212.             Case 37, 42, 43, 45 To 57, 61, 94
  1213.               Form_KeyPress (AscVal)
  1214.             Case 44 ' ignore
  1215.             Case Else
  1216.               Select Case AddWhere
  1217.                 Case 0 ' ignore
  1218.                 Case 1 ' add after word
  1219.                   Form_KeyPress (AddOp(AddWhat))
  1220.                 Case 2 ' add after line
  1221.                   If AscVal = 13 Then
  1222.                     Form_KeyPress (AddOp(AddWhat))
  1223.                   End If
  1224.               End Select
  1225.           End Select
  1226.         Next N
  1227.       End If
  1228.     Case 2
  1229.       ' Copy result to clipboard
  1230.       Clipboard.SetText PanelResult.Caption
  1231.     Case 4 ' Options dialog
  1232.       ' Initialize controls to current values
  1233.       For N = 0 To 2
  1234.         FormOptions.OptionWhere(N).Value = False
  1235.         FormOptions.OptionWhat(N).Value = False
  1236.       Next N
  1237.       FormOptions.OptionWhat(3).Value = False
  1238.       FormOptions.OptionWhere(AddWhere) = True
  1239.       FormOptions.OptionWhat(AddWhat) = True
  1240.       FormOptions.TextTapeLen.Text = Format$(TapeLength)
  1241.       FormOptions.Show MODAL
  1242.       ' If OK selected, make use of changed values
  1243.       If FormOptions.Tag = 1 Then
  1244.         For N = 0 To 2
  1245.           If FormOptions.OptionWhere(N).Value Then AddWhere = N
  1246.           If FormOptions.OptionWhat(N).Value Then AddWhat = N
  1247.         Next N
  1248.         If FormOptions.OptionWhat(3).Value Then AddWhat = 3
  1249.         'TapeLength value returned
  1250.         TapeLength = Val(FormOptions.TextTapeLen.Text)
  1251.         If TapeLength < 40 Then TapeLength = 40
  1252.         If TapeLength > 1000 Then TapeLength = 1000
  1253.         Dim Success%
  1254.         Success = WritePrivateProfileString("Options", "TapeLength", Format$(TapeLength), "TAPECALC.INI")
  1255.         Success = WritePrivateProfileString("Options", "PasteAddWhere", Format$(AddWhere), "TAPECALC.INI")
  1256.         Success = WritePrivateProfileString("Options", "PasteAddWhat", Format$(AddWhat), "TAPECALC.INI")
  1257.         ' Delete rows if necessary to fit in new length
  1258.         Do While GridTape.Rows > TapeLength
  1259.           GridTape.RemoveItem 0
  1260.         Loop
  1261.       End If
  1262.   End Select
  1263. End Sub
  1264.  
  1265. Sub mnu_File_Click (Index As Integer)
  1266.   On Error GoTo FileError
  1267.   Select Case Index
  1268.     Case 0 ' new tape
  1269.       GridTape.Rows = 1
  1270.       Dim N%
  1271.       For N = 1 To LinesShown
  1272.         GridTape.AddItem ""
  1273.       Next N
  1274.       EntryStr = ""
  1275.       Entry = 0
  1276.       Accum = 0
  1277.       Sync = SYNC_InSync
  1278.       PanelResult.Caption = ""
  1279.       Op = OPS_NONE
  1280.       State = STATE_FIRST
  1281.       TapeFileName = ""
  1282.       Caption = "TapeCalc"
  1283.     Case 1 ' save tape
  1284.       If TapeFileName = "" Then
  1285.         mnu_File_Click (2)
  1286.       Else
  1287.         SaveFile
  1288.       End If
  1289.     Case 2 ' save as
  1290.       CMDialog1.CancelError = True
  1291.       CMDialog1.DefaultExt = "TAP"
  1292.       CMDialog1.DialogTitle = "Save Tape As"
  1293.       If TapeFileName = "" Then
  1294.         CMDialog1.Filename = "TAPEFILE.TAP"
  1295.       Else
  1296.         CMDialog1.Filename = TapeFileName
  1297.       End If
  1298.       CMDialog1.FilterIndex = 0
  1299.       CMDialog1.Filter = "Tape Files (*.tap)|*.tap|Text Files (*.txt)|*.txt"
  1300.       CMDialog1.HelpCommand = 0
  1301.       CMDialog1.HelpContext = 0
  1302.       CMDialog1.HelpFile = ""
  1303.       CMDialog1.HelpKey = ""
  1304.       CMDialog1.InitDir = ""
  1305.       CMDialog1.MaxFileSize = 256
  1306.  
  1307.       ' Constants for file open/save common dialog
  1308.       Const OFN_OVERWRITEPROMPT = &H2&
  1309.       Const OFN_HIDEREADONLY = &H4&
  1310.       Const OFN_PATHMUSTEXIST = &H800&
  1311.  
  1312.       CMDialog1.Flags = OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT Or OFN_PATHMUSTEXIST
  1313.       CMDialog1.Action = 2
  1314.       TapeFileName = CMDialog1.Filename
  1315.       SaveFile
  1316.       Caption = "TapeCalc - (" + TapeFileName + ")"
  1317.     Case 4
  1318.       Unload Me
  1319.   End Select
  1320.   Exit Sub
  1321. FileError:
  1322.   Exit Sub
  1323. End Sub
  1324.  
  1325. Sub mnu_Help_Click (Index As Integer)
  1326.   CMDialog1.HelpFile = "TAPECALC.HLP"
  1327.   ' Constants for help system
  1328.   Const HELP_CONTEXT = &H1
  1329.   Const HELP_HELPONHELP = &H4
  1330.   Const HELP_PARTIALKEY = &H105
  1331.   Select Case Index
  1332.     Case 0 ' Contents
  1333.       CMDialog1.HelpContext = 0
  1334.       CMDialog1.HelpCommand = HELP_CONTEXT
  1335.       CMDialog1.Action = 6
  1336.     Case 1 ' Search for Help On...
  1337.       CMDialog1.HelpKey = ""
  1338.       CMDialog1.HelpCommand = HELP_PARTIALKEY
  1339.       CMDialog1.Action = 6
  1340.     Case 2 ' Help On Help
  1341.       CMDialog1.HelpCommand = HELP_HELPONHELP
  1342.       CMDialog1.Action = 6
  1343.     Case 4 ' About TapeCalc...
  1344.       DisplayAboutBox FormCalc, "TAPECALC", 1#, 1995, "Neil J. Rubenking", "First Published in PC Magazine", "February 7, 1995, U.S. Edition", 0, False, 0, &HC0C0C0
  1345.   End Select
  1346. End Sub
  1347.  
  1348. Sub mnu_View_Click (Index As Integer)
  1349.   Dim Success%
  1350.   On Error GoTo ViewError
  1351.   Select Case Index
  1352.     Case 0 ' Tape Visible
  1353.       If mnu_View(0).Checked Then
  1354.         FormCalc.Move Left, Top, ButtonPanel.Width + 30
  1355.       Else
  1356.         FormCalc.Move Left, Top, TapePanel.Left + TapePanel.Width + 30
  1357.       End If
  1358.       mnu_View(0).Checked = Not mnu_View(0).Checked
  1359.       Success = WritePrivateProfileString("Options", "TapeVisible", Format$(mnu_View(0).Checked), "TAPECALC.INI")
  1360.     Case 1 ' Tape font
  1361.       CMDialog1.CancelError = True
  1362.       CMDialog1.FontBold = GridTape.FontBold
  1363.       CMDialog1.FontItalic = GridTape.FontItalic
  1364.       CMDialog1.FontName = GridTape.FontName
  1365.       CMDialog1.FontSize = GridTape.FontSize
  1366.       CMDialog1.HelpCommand = 0
  1367.       CMDialog1.HelpContext = 0
  1368.       CMDialog1.HelpFile = ""
  1369.       CMDialog1.HelpKey = ""
  1370.       CMDialog1.Max = 20
  1371.       CMDialog1.Min = 6
  1372.  
  1373.       ' Constants for font common dialog
  1374.       Const CF_SCREENFONTS = &H1&
  1375.       Const CF_ANSIONLY = &H400&
  1376.       Const CF_LIMITSIZE = &H2000&
  1377.       Const CF_FORCEFONTEXIST = &H10000
  1378.  
  1379.       CMDialog1.Flags = CF_ANSIONLY Or CF_FORCEFONTEXIST Or CF_SCREENFONTS Or CF_LIMITSIZE
  1380.       CMDialog1.Action = 4
  1381.      ' Store font info in PictureMem because we use its
  1382.      '  hDC property to make calculations.
  1383.       PictureMem.FontBold = CMDialog1.FontBold
  1384.       PictureMem.FontItalic = CMDialog1.FontItalic
  1385.       PictureMem.FontName = CMDialog1.FontName
  1386.       PictureMem.FontSize = CMDialog1.FontSize
  1387.       GridTape.FontBold = CMDialog1.FontBold
  1388.       GridTape.FontItalic = CMDialog1.FontItalic
  1389.       GridTape.FontName = CMDialog1.FontName
  1390.       GridTape.FontSize = CMDialog1.FontSize
  1391.       ' Store changes in INI file
  1392.       Success = WritePrivateProfileString("Font", "Bold", Format$(GridTape.FontBold), "TAPECALC.INI")
  1393.       Success = WritePrivateProfileString("Font", "Italic", Format$(GridTape.FontItalic), "TAPECALC.INI")
  1394.       Success = WritePrivateProfileString("Font", "Size", Format$(GridTape.FontSize), "TAPECALC.INI")
  1395.       Success = WritePrivateProfileString("Font", "Name", GridTape.FontName, "TAPECALC.INI")
  1396.       ' Recalculate number of tape lines visible etc.
  1397.       GetTapeMetrics
  1398.     Case 3 To 5 ' Set fixed/floating option
  1399.       mnu_View(3).Checked = False
  1400.       mnu_View(4).Checked = False
  1401.       mnu_View(5).Checked = False
  1402.       mnu_View(Index).Checked = True
  1403.       FixedFloat = Index - 3
  1404.       PanelResult.Caption = SpecialFormat(Entry)
  1405.       Success = WritePrivateProfileString("Options", "FixedFloat", Format$(FixedFloat), "TAPECALC.INI")
  1406.   End Select
  1407.   Exit Sub
  1408. ViewError:
  1409.   Exit Sub
  1410. End Sub
  1411.  
  1412. Function OpChar$ (TheOp%)
  1413.   ' Return the character corresponding to passed value
  1414.   Select Case TheOp
  1415.     Case OPS_PLUS
  1416.       OpChar = "+"
  1417.     Case OPS_MINUS
  1418.       OpChar = "-"
  1419.     Case OPS_TIMES
  1420.       OpChar = "*"
  1421.     Case OPS_DIVIDE
  1422.       OpChar = "/"
  1423.     'If you add a new binary operator, you need to add its
  1424.     ' operator constant to this Select Case statement, returning
  1425.     ' the character or string associated with the operator
  1426.     Case OPS_POWER
  1427.       OpChar = "^"
  1428.   End Select
  1429. End Function
  1430.  
  1431. Sub Operate ()
  1432.   ' Perform the pending operation.
  1433.   Dim Rslt#
  1434.   On Error GoTo OFlow
  1435.   UnHighlightOp
  1436.   Select Case Op
  1437.     Case OPS_NONE
  1438.       Accum = 0
  1439.       AddToTape PanelResult.Caption, "T"
  1440.       AddToTape " ", ""
  1441.       Exit Sub
  1442.     Case OPS_PLUS
  1443.       Rslt = Accum + Entry
  1444.     Case OPS_MINUS
  1445.       Rslt = Accum - Entry
  1446.     Case OPS_TIMES
  1447.       Rslt = Accum * Entry
  1448.     Case OPS_DIVIDE
  1449.       Rslt = Accum / Entry
  1450.     'If you add a new binary operator, you need to add its
  1451.     ' operator constant to this Select Case statement, followed
  1452.     ' by code that implements the operation
  1453.     Case OPS_POWER
  1454.       Rslt = Accum ^ Entry
  1455.   End Select
  1456.   Accum = Rslt
  1457.   Entry = Accum
  1458.   Sync = SYNC_NumAhead
  1459.   SyncUp
  1460.   Op = OPS_NONE
  1461.   Exit Sub
  1462. OFlow:
  1463.   State = STATE_OVERFLOW
  1464.   EntryStr = "Overflow"
  1465.   PanelResult.Caption = EntryStr
  1466.   AddToTape PanelResult.Caption, ""
  1467.   Exit Sub
  1468. End Sub
  1469.  
  1470. Sub SaveFile ()
  1471.   ' If two or more rows highlighted, save highlighted
  1472.   '  part to file. Otherwise save entire tape to file.
  1473.   Dim fNum%, Success%, Txt$
  1474.   Success = SelectedTape(Txt)
  1475.   fNum = FreeFile
  1476.   Open TapeFileName For Output Access Write As fNum
  1477.   Print #fNum, Txt
  1478.   Close fNum
  1479. End Sub
  1480.  
  1481. Function SelectedTape% (Txt$)
  1482.   ' Fill variable Txt with selected portion of tape. If
  1483.   '  fewer than two rows selected, fill with entire
  1484.   '  contents of tape. In either case, omit leading
  1485.   '  blank rows. Return length of Txt.
  1486.   Dim N%, CopStart%, CopEnd%, WasRow%
  1487.   CopStart = GridTape.SelStartRow
  1488.   CopEnd = GridTape.SelEndRow
  1489.   WasRow = GridTape.Row
  1490.   If CopStart = CopEnd Then
  1491.     CopStart = 0
  1492.     CopEnd = GridTape.Rows - 1
  1493.   End If
  1494.   GridTape.Row = CopStart
  1495.   GridTape.Col = 0
  1496.   Do While (GridTape.Text = "") And (GridTape.Row < CopEnd)
  1497.     GridTape.Row = GridTape.Row + 1
  1498.   Loop
  1499.   If GridTape.Row = CopEnd Then
  1500.     GridTape.Row = WasRow
  1501.     Exit Function
  1502.   End If
  1503.   Txt = ""
  1504.   For N = GridTape.Row To CopEnd
  1505.     GridTape.Row = N
  1506.     GridTape.Col = 0
  1507.     Txt = Txt + GridTape.Text + Chr(9)
  1508.     GridTape.Col = 1
  1509.     Txt = Txt + GridTape.Text + Chr(13) + Chr(10)
  1510.   Next N
  1511.   GridTape.Row = WasRow
  1512.   GridTape.Col = 0
  1513.   SelectedTape = Len(Txt)
  1514. End Function
  1515.  
  1516. Function SpecialFormat$ (ByVal Valu#)
  1517.   ' Convert passed number to a string in the selected
  1518.   '  format. If result is too wide, adjust for current
  1519.   '  font.
  1520.   Dim Temp$, DecPosn%
  1521.   Temp = Format$(Valu, FormatStr(FixedFloat))
  1522.   If Len(Temp) > CharsInTape - 6 Then
  1523.     If FixedFloat = 0 Then ' floating point
  1524.       DecPosn = InStr(Temp, ".")
  1525.       If (DecPosn = 0) Or (DecPosn > CharsInTape - 6) Then
  1526.         Temp = Format$(Valu, FormatStr(3))
  1527.       Else
  1528.         Temp = Left$(Temp, CharsInTape - 6)
  1529.       End If
  1530.     Else
  1531.       Temp = Format$(Valu, FormatStr(3))
  1532.     End If
  1533.   End If
  1534.   If (Valu = 0) And (Left$(EntryStr, 1) = "-") Then
  1535.     Temp = "-" + Temp
  1536.   End If
  1537.   SpecialFormat = Temp
  1538. End Function
  1539.  
  1540. Sub StandardAction (C%)
  1541.   ' The StateXxxx functions call StandardAction when
  1542.   '  the behavior of a button is the same for two or
  1543.   '  more states.
  1544.   Select Case C
  1545.     '=== the first group of buttons don't change the state
  1546.     Case BTN_CE
  1547.       EntryStr = ""
  1548.       Entry = 0
  1549.     Case BTN_BACKSPACE
  1550.       If Len(EntryStr) > 0 Then
  1551.         EntryStr = Left$(EntryStr, Len(EntryStr) - 1)
  1552.       End If
  1553.       If EntryStr = "-" Then
  1554.         EntryStr = ""
  1555.       End If
  1556.       Sync = SYNC_StrAhead
  1557.     Case BTN_0 To BTN_9
  1558.       If EntryStr = "0" Then
  1559.         EntryStr = Format(C)
  1560.       ElseIf EntryStr = "-0" Then
  1561.         EntryStr = "-" + Format(C)
  1562.       Else
  1563.         EntryStr = EntryStr + Format(C)
  1564.       End If
  1565.       Sync = SYNC_StrAhead
  1566.     Case BTN_DEC
  1567.       If InStr(EntryStr, ".") = 0 Then
  1568.         EntryStr = EntryStr + "."
  1569.         Sync = SYNC_StrAhead
  1570.       Else
  1571.         MessageBeep (0)
  1572.       End If
  1573.     Case BTN_PLUSMINUS
  1574.       If EntryStr = "" Then EntryStr = "0"
  1575.       If Left$(EntryStr, 1) = "-" Then
  1576.         EntryStr = Mid$(EntryStr, 2)
  1577.       Else
  1578.         EntryStr = "-" + EntryStr
  1579.       End If
  1580.       Sync = SYNC_StrAhead
  1581.     Case BTN_MP
  1582.       Memory = Memory + Entry
  1583.       PictureMem.Visible = True
  1584.     Case BTN_MS
  1585.       Memory = Entry
  1586.       PictureMem.Visible = True
  1587.     Case BTN_MR
  1588.       EntryStr = Format(Memory)
  1589.       Entry = Memory
  1590.     Case BTN_MC
  1591.       Memory = 0
  1592.       PictureMem.Visible = False
  1593.     Case BTN_ADVANCE
  1594.       GridTape.AddItem ""
  1595.       If GridTape.Rows > LinesShown Then
  1596.         GridTape.TopRow = GridTape.Rows - LinesShown
  1597.       End If
  1598.     '=== the next group of buttons change the state
  1599.     Case BTN_SQRT
  1600.       If Entry < 0 Then
  1601.         State = STATE_OVERFLOW
  1602.         EntryStr = "Overflow"
  1603.         AddToTape "Overflow", ""
  1604.       Else
  1605.         AddToTape PanelResult.Caption, "SQ"
  1606.         Entry = Sqr(Entry)
  1607.         Sync = SYNC_NumAhead
  1608.         State = STATE_FROZE
  1609.       End If
  1610.     Case BTN_INVERSE
  1611.       If Entry = 0 Then
  1612.         State = STATE_OVERFLOW
  1613.         EntryStr = "Overflow"
  1614.         AddToTape "Overflow", ""
  1615.       Else
  1616.         AddToTape PanelResult.Caption, "1/"
  1617.         Entry = 1 / Entry
  1618.         Sync = SYNC_NumAhead
  1619.         State = STATE_FROZE
  1620.       End If
  1621.     Case BTN_PERCENT
  1622.       If (Op <> OPS_PLUS) And (Op <> OPS_MINUS) Then
  1623.         MessageBeep (0)
  1624.         Exit Sub
  1625.       End If
  1626.       Entry = (Entry / 100) * Accum
  1627.       AddToTape PanelResult.Caption, "%="
  1628.       Operate
  1629.       If State <> STATE_OVERFLOW Then
  1630.         AddToTape PanelResult.Caption, "T"
  1631.         AddToTape " ", ""
  1632.         State = STATE_FROZE
  1633.       End If
  1634.       Op = OPS_NONE
  1635.     Case BTN_CLEAR
  1636.       AddToTape "Clear", ""
  1637.       StateOverflow BTN_CLEAR
  1638.     Case OPBTN_FIRST To OPBTN_LAST
  1639.       TCButton(C).ForeColor = &HFFFFFF
  1640.       Op = C - OPBTN_FIRST + 1
  1641.       AddToTape PanelResult.Caption, OpChar(Op)
  1642.       State = STATE_OP
  1643.   End Select
  1644. End Sub
  1645.  
  1646. Sub StateFirst (C%)
  1647.   Select Case C
  1648.     Case BTN_EQUAL
  1649.       AddToTape PanelResult.Caption, "T"
  1650.       AddToTape " ", ""
  1651.     Case BTN_PERCENT
  1652.       Entry = Entry / 100
  1653.       Sync = SYNC_NumAhead
  1654.       SyncUp
  1655.     Case Else
  1656.       StandardAction C
  1657.   End Select
  1658. End Sub
  1659.  
  1660. Sub StateFroze (C%)
  1661.   Select Case C
  1662.     Case BTN_EQUAL
  1663.       AddToTape PanelResult.Caption, "="
  1664.       Operate
  1665.       If State <> STATE_OVERFLOW Then
  1666.         AddToTape PanelResult.Caption, "T"
  1667.         AddToTape " ", ""
  1668.       End If
  1669.     Case BTN_BACKSPACE, BTN_0 To BTN_9, BTN_DEC, BTN_MR
  1670.       Accum = 0
  1671.       Select Case C
  1672.         Case BTN_BACKSPACE
  1673.           EntryStr = "0"
  1674.         Case BTN_0 To BTN_9
  1675.           EntryStr = Format(C)
  1676.         Case BTN_DEC
  1677.           EntryStr = "0."
  1678.         Case BTN_MR
  1679.           EntryStr = Format(Memory)
  1680.       End Select
  1681.       Sync = SYNC_StrAhead
  1682.       State = STATE_FIRST
  1683.     Case BTN_PERCENT
  1684.       State = STATE_FIRST
  1685.       StateFirst C
  1686.     Case BTN_SQRT, BTN_INVERSE
  1687.       Op = OPS_NONE
  1688.       StandardAction C
  1689.     Case Else
  1690.       StandardAction C
  1691.   End Select
  1692. End Sub
  1693.  
  1694. Sub StateOp (C%)
  1695.   Select Case C
  1696.     Case OPBTN_FIRST To OPBTN_LAST
  1697.       UnHighlightOp
  1698.       TCButton(C).ForeColor = &HFFFFFF
  1699.       Op = C - OPBTN_FIRST + 1
  1700.       GridTape.Row = GridTape.Rows - 1
  1701.       GridTape.Col = 1
  1702.       GridTape.Text = " " + OpChar(Op)
  1703.       State = STATE_OP
  1704.     Case BTN_BACKSPACE, BTN_0 To BTN_9, BTN_DEC, BTN_MR
  1705.       UnHighlightOp
  1706.       Accum = Entry
  1707.       Select Case C
  1708.         Case BTN_BACKSPACE
  1709.           EntryStr = "0"
  1710.         Case BTN_0 To BTN_9
  1711.           EntryStr = Format(C)
  1712.         Case BTN_DEC
  1713.           EntryStr = "0."
  1714.         Case BTN_MR
  1715.           EntryStr = Format(Memory)
  1716.       End Select
  1717.       Sync = SYNC_StrAhead
  1718.       State = STATE_SECOND
  1719.     Case BTN_PERCENT
  1720.       MessageBeep (0)
  1721.     Case BTN_EQUAL
  1722.       UnHighlightOp
  1723.       GridTape.Row = GridTape.Rows - 1
  1724.       GridTape.Col = 1
  1725.       GridTape.Text = " ="
  1726.       AddToTape PanelResult.Caption, "T"
  1727.       AddToTape " ", ""
  1728.       State = STATE_FROZE
  1729.     Case Else
  1730.       StandardAction C
  1731.   End Select
  1732. End Sub
  1733.  
  1734. Sub StateOverflow (C%)
  1735.   Select Case C
  1736.     Case BTN_CLEAR, BTN_CE
  1737.       EntryStr = ""
  1738.       Accum = 0
  1739.       Sync = SYNC_StrAhead
  1740.       Op = OPS_NONE
  1741.       State = STATE_FIRST
  1742.     Case Else
  1743.       MessageBeep (0)
  1744.   End Select
  1745. End Sub
  1746.  
  1747. Sub StateSecond (C%)
  1748.   Select Case C
  1749.     Case OPBTN_FIRST To OPBTN_LAST
  1750.       AddToTape PanelResult.Caption, OpChar(C - OPBTN_FIRST + 1)
  1751.       Operate
  1752.       Op = C - OPBTN_FIRST + 1
  1753.       If State <> STATE_OVERFLOW Then State = STATE_OP
  1754.     Case BTN_EQUAL
  1755.       AddToTape PanelResult.Caption, "="
  1756.       Operate
  1757.       If State <> STATE_OVERFLOW Then
  1758.         AddToTape PanelResult.Caption, "T"
  1759.         AddToTape " ", ""
  1760.         State = STATE_FROZE
  1761.       End If
  1762.     Case Else
  1763.       StandardAction C
  1764.   End Select
  1765. End Sub
  1766.  
  1767. Sub SyncUp ()
  1768.   ' Synchronize the numeric entry with the
  1769.   ' displayed string
  1770.   If State = STATE_OVERFLOW Then
  1771.     PanelResult.Caption = "Overflow"
  1772.   Else
  1773.     Select Case Sync
  1774.       Case SYNC_NumAhead
  1775.         EntryStr = Format(Entry)
  1776.       Case SYNC_StrAhead
  1777.         If EntryStr = "" Then EntryStr = "0"
  1778.         Entry = Val(EntryStr)
  1779.     End Select
  1780.     Sync = SYNC_InSync
  1781.     PanelResult.Caption = SpecialFormat(Entry)
  1782.   End If
  1783. End Sub
  1784.  
  1785. Sub TCButton_Click (Index As Integer)
  1786.   Dispatch State, Index
  1787. End Sub
  1788.  
  1789. Sub Timer1_Timer ()
  1790.   Dim Success%
  1791.   ' If a button is visibly pressed, un-press it
  1792.   If ButtonUp >= BTN_0 Then
  1793.     Success = SendMessage(TCButton(ButtonUp).hWnd, BM_SETSTATE, 0, 0)
  1794.   End If
  1795.   ' Disable the timer
  1796.   Timer1.Interval = 0
  1797.   ButtonUp = -1
  1798. End Sub
  1799.  
  1800. Sub UnHighlightOp ()
  1801.   ' When an operator is pending, its button is highlighted.
  1802.   '  This function removes the highlight from ALL four
  1803.   '  operator buttons
  1804.   Dim N%
  1805.   For N = OPBTN_FIRST To OPBTN_LAST
  1806.     TCButton(N).ForeColor = 0
  1807.   Next N
  1808. End Sub
  1809.  
  1810.